In this tutorial we're going to setup a minecraft server:
First install the required dependencies:
root@minecraft:~# apt update -y ; apt upgrade -y ; apt install default-jdk -y
root@minecraft:~# apt update -y ; apt install default-jre software-properties-common python3-launchpadlib -y
root@minecraft:~# add-apt-repository ppa:webupd8team/java
root@minecraft:~# java -version
openjdk version "11.0.11" 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.20.04)
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing)
root@minecraft:~# adduser mcuser
Adding user `mcuser' ...
Adding new group `mcuser' (1000) ...
Adding new user `mcuser' (1000) with group `mcuser' ...
Creating home directory `/home/mcuser' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for mcuser
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
root@minecraft:~# usermod -aG sudo mcuser
root@minecraft:~# su - mcuser
To run a command as administrator (user "root"), use "sudo ".
See "man sudo_root" for details.
mcuser@minecraft:~$ pwd
/home/mcuser
mcuser@minecraft:~$ mkdir minecraft
mcuser@minecraft:~$ cd minecraft/
mcuser@minecraft:~/minecraft$ wget https://maven.minecraftforge.net/net/minecraftforge/forge/1.12.2-14.23.5.2855/forge-1.12.2-14.23.5.2855-installer.jar
--2021-11-16 16:26:29-- https://maven.minecraftforge.net/net/minecraftforge/forge/1.12.2-14.23.5.2855/forge-1.12.2-14.23.5.2855-installer.jar
Resolving maven.minecraftforge.net (maven.minecraftforge.net)... 51.79.83.165, 2607:5300:203:65a5::
Connecting to maven.minecraftforge.net (maven.minecraftforge.net)|51.79.83.165|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4583673 (4.4M) [application/java-archive]
Saving to: 'forge-1.12.2-14.23.5.2855-installer.jar'
forge-1.12.2-14.23.5.2855-installer.jar 100%[======================================================================================================================>] 4.37M 2.84MB/s in 1.5s
2021-11-16 16:26:31 (2.84 MB/s) - 'forge-1.12.2-14.23.5.2855-installer.jar' saved [4583673/4583673]
mcuser@minecraft:~/minecraft$ java -jar forge-1.12.2-14.23.5.2855-installer.jar --installServer
JVM info: Ubuntu - 11.0.11 - 11.0.11+9-Ubuntu-0ubuntu2.20.04
java.net.preferIPv4Stack=true
Found java version 11.0.11
Target Directory: .
Data kindly mirrored by CreeperHost at https://www.creeperhost.net/
Extracting main jar:
Extracted successfully
Considering minecraft server jar
Downloading library from https://launcher.mojang.com/v1/objects/886945bfb2b978778c3a0288fd7fab09d315b25f/server.jar
[...]
Building Processors
The server installed successfully
You can delete this installer file now if you wish
mcuser@minecraft:~/minecraft$ ls -l
total 38368
-rw-rw-r-- 1 mcuser mcuser 4583673 Nov 16 16:26 forge-1.12.2-14.23.5.2855-installer.jar
-rw-rw-r-- 1 mcuser mcuser 5054 Nov 16 16:28 forge-1.12.2-14.23.5.2855-installer.jar.log
-rw-rw-r-- 1 mcuser mcuser 4464387 Nov 16 16:28 forge-1.12.2-14.23.5.2855.jar
drwxrwxr-x 7 mcuser mcuser 4096 Nov 16 16:28 libraries
-rw-rw-r-- 1 mcuser mcuser 30222121 Nov 16 16:28 minecraft_server.1.12.2.jar
Now let's test if it works:
mcuser@minecraft:~/minecraft$ java -Xmx2048M -Xms2048M -jar minecraft_server.1.12.2.jar nogui
[16:31:36] [Server thread/INFO]: Starting minecraft server version 1.12.2
[16:31:36] [Server thread/INFO]: Loading properties
[16:31:36] [Server thread/WARN]: server.properties does not exist
[16:31:36] [Server thread/INFO]: Generating new properties file
[16:31:36] [Server thread/WARN]: Failed to load eula.txt
[16:31:36] [Server thread/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
[16:31:36] [Server thread/INFO]: Stopping server
[16:31:36] [Server Shutdown Thread/INFO]: Stopping server
mcuser@minecraft:~/minecraft$ ls -lash
total 38M
4.0K drwxrwxr-x 4 mcuser mcuser 4.0K Nov 16 16:31 .
4.0K drwxr-xr-x 5 mcuser mcuser 4.0K Nov 16 16:27 ..
4.0K -rw-rw-r-- 1 mcuser mcuser 181 Nov 16 16:31 eula.txt
4.4M -rw-rw-r-- 1 mcuser mcuser 4.4M Nov 16 16:26 forge-1.12.2-14.23.5.2855-installer.jar
8.0K -rw-rw-r-- 1 mcuser mcuser 5.0K Nov 16 16:28 forge-1.12.2-14.23.5.2855-installer.jar.log
4.3M -rw-rw-r-- 1 mcuser mcuser 4.3M Nov 16 16:28 forge-1.12.2-14.23.5.2855.jar
4.0K drwxrwxr-x 7 mcuser mcuser 4.0K Nov 16 16:28 libraries
4.0K drwxrwxr-x 2 mcuser mcuser 4.0K Nov 16 16:31 logs
29M -rw-rw-r-- 1 mcuser mcuser 29M Nov 16 16:28 minecraft_server.1.12.2.jar
4.0K -rw-rw-r-- 1 mcuser mcuser 59 Nov 16 16:31 server.properties
mcuser@minecraft:~/minecraft$ cat eula.txt
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
#Tue Nov 16 16:31:36 UTC 2021
eula=true
mcuser@minecraft:~/minecraft$ java -Xmx2048M -Xms2048M -jar minecraft_server.1.12.2.jar nogui
[16:34:00] [Server thread/INFO]: Starting minecraft server version 1.12.2
[16:34:00] [Server thread/INFO]: Loading properties
[16:34:00] [Server thread/INFO]: Default game type: SURVIVAL
[16:34:00] [Server thread/INFO]: Generating keypair
[16:34:00] [Server thread/INFO]: Starting Minecraft server on *:25565
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by io.netty.util.internal.ReflectionUtil (file:/home/mcuser/minecraft/minecraft_server.1.12.2.jar) to constructor java.nio.DirectByteBuffer(long,int)
WARNING: Please consider reporting this to the maintainers of io.netty.util.internal.ReflectionUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[16:34:00] [Server thread/INFO]: Using epoll channel type
[16:34:00] [Server thread/INFO]: Preparing level "world"
[16:34:01] [Server thread/INFO]: Loaded 488 advancements
[16:34:02] [Server thread/INFO]: Preparing start region for level 0
[16:34:03] [Server thread/INFO]: Preparing spawn area: 5%
[16:34:04] [Server thread/INFO]: Preparing spawn area: 8%
[16:34:05] [Server thread/INFO]: Preparing spawn area: 13%
[16:34:06] [Server thread/INFO]: Preparing spawn area: 16%
[16:34:07] [Server thread/INFO]: Preparing spawn area: 21%
[16:34:08] [Server thread/INFO]: Preparing spawn area: 27%
[16:34:09] [Server thread/INFO]: Preparing spawn area: 35%
[16:34:10] [Server thread/INFO]: Preparing spawn area: 41%
[16:34:11] [Server thread/INFO]: Preparing spawn area: 48%
[16:34:12] [Server thread/INFO]: Preparing spawn area: 55%
[16:34:13] [Server thread/INFO]: Preparing spawn area: 62%
[16:34:14] [Server thread/INFO]: Preparing spawn area: 70%
[16:34:15] [Server thread/INFO]: Preparing spawn area: 78%
[16:34:16] [Server thread/INFO]: Preparing spawn area: 86%
[16:34:17] [Server thread/INFO]: Preparing spawn area: 94%
[16:34:18] [Server thread/INFO]: Done (17.633s)! For help, type "help" or "?"
Now the minecraft server is up, let's check if it works, first install minecraft on your client::
[ 10.66.66.2/32 ] [ /dev/pts/135 ] [~]
→ yay -S minecraft-launcher
[ 10.66.66.2/32 ] [ /dev/pts/135 ] [~]
→ which minecraft-launcher
/usr/bin/minecraft-launcher
Next if you need to port forward the mc server to the public, it will be on port 25565.
Now if you want to make a modded server, you will need a few things, first you will need minecraft forge install:
[ 10.66.66.2/32 ] [ /dev/pts/138 ] [~]
→ cd Downloads
[ 10.66.66.2/32 ] [ /dev/pts/138 ] [~/Downloads]
→ java -jar forge-1.12.2-14.23.5.2855-installer.jar
This will open the forge installer, select client this time:
And then we can login once again into the server:
Now let's add a mod into the minecraft server:
mcuser@minecraft:~$ ls -l
total 4
drwxrwxr-x 5 mcuser mcuser 4096 Nov 16 16:34 minecraft
mcuser@minecraft:~$ cd minecraft/
mcuser@minecraft:~/minecraft$ ls -l
total 38404
-rw-rw-r-- 1 mcuser mcuser 2 Nov 16 16:34 banned-ips.json
-rw-rw-r-- 1 mcuser mcuser 2 Nov 16 16:34 banned-players.json
-rw-rw-r-- 1 mcuser mcuser 180 Nov 16 16:33 eula.txt
-rw-rw-r-- 1 mcuser mcuser 4583673 Nov 16 16:26 forge-1.12.2-14.23.5.2855-installer.jar
-rw-rw-r-- 1 mcuser mcuser 5054 Nov 16 16:28 forge-1.12.2-14.23.5.2855-installer.jar.log
-rw-rw-r-- 1 mcuser mcuser 4464387 Nov 16 16:28 forge-1.12.2-14.23.5.2855.jar
drwxrwxr-x 7 mcuser mcuser 4096 Nov 16 16:28 libraries
drwxrwxr-x 2 mcuser mcuser 4096 Nov 16 16:33 logs
-rw-rw-r-- 1 mcuser mcuser 30222121 Nov 16 16:28 minecraft_server.1.12.2.jar
-rw-rw-r-- 1 mcuser mcuser 2 Nov 16 16:34 ops.json
-rw-rw-r-- 1 mcuser mcuser 753 Nov 16 16:34 server.properties
-rw-rw-r-- 1 mcuser mcuser 109 Nov 16 16:44 usercache.json
-rw-rw-r-- 1 mcuser mcuser 2 Nov 16 16:34 whitelist.json
drwxrwxr-x 9 mcuser mcuser 4096 Nov 16 16:49 world
mcuser@minecraft:~/minecraft$ mkdir mods
mcuser@minecraft:~/minecraft$ cd mods
mcuser@minecraft:~/minecraft/mods$ wget https://media.forgecdn.net/files/2835/318/defiledlands-1.12.2-1.4.3.jar
--2021-11-16 17:10:34-- https://media.forgecdn.net/files/2835/318/defiledlands-1.12.2-1.4.3.jar
Resolving media.forgecdn.net (media.forgecdn.net)... 13.224.226.86, 13.224.226.118, 13.224.226.83, ...
Connecting to media.forgecdn.net (media.forgecdn.net)|13.224.226.86|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 780421 (762K) [application/x-amz-json-1.0]
Saving to: 'defiledlands-1.12.2-1.4.3.jar'
defiledlands-1.12.2-1.4.3.jar 100%[======================================================================================================================>] 762.13K 3.50MB/s in 0.2s
2021-11-16 17:10:35 (3.50 MB/s) - 'defiledlands-1.12.2-1.4.3.jar' saved [780421/780421]
mcuser@minecraft:~/minecraft/mods$ wget https://media.forgecdn.net/files/2518/667/Baubles-1.12-1.5.2.jar
--2021-11-16 17:23:53-- https://media.forgecdn.net/files/2518/667/Baubles-1.12-1.5.2.jar
Resolving media.forgecdn.net (media.forgecdn.net)... 13.224.226.110, 13.224.226.86, 13.224.226.83, ...
Connecting to media.forgecdn.net (media.forgecdn.net)|13.224.226.110|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 108450 (106K) [application/octet-stream]
Saving to: 'Baubles-1.12-1.5.2.jar'
Baubles-1.12-1.5.2.jar 100%[======================================================================================================================>] 105.91K --.-KB/s in 0.04s
2021-11-16 17:23:54 (2.38 MB/s) - 'Baubles-1.12-1.5.2.jar' saved [108450/108450]
mcuser@minecraft:~/minecraft/mods$ cd ..
mcuser@minecraft:~/minecraft$ java -Xmx2048M -Xms2048M -jar minecraft_server.1.12.2.jar nogui
Now if we want to run our minecraft forge server we need an older version of java:
mcuser@minecraft:~/minecraft$ sudo apt purge java-common default-jdk default-jre
mcuser@minecraft:~/minecraft$ sudo apt install openjdk-8-jre -y
mcuser@minecraft:~/minecraft$ java -version
mcuser@minecraft:~/minecraft$ java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-8u292-b10-0ubuntu1~20.04-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)
mcuser@minecraft:~/minecraft$ java -Xmx2048M -Xms2048M -jar forge-1.12.2-14.23.5.2855.jar nogui
[17:24:19] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLServerTweaker
[17:24:19] [main/INFO] [LaunchWrapper]: Using primary tweak class name net.minecraftforge.fml.common.launcher.FMLServerTweaker
[17:24:19] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLServerTweaker
[17:24:19] [main/INFO] [FML]: Forge Mod Loader version 14.23.5.2855 for Minecraft 1.12.2 loading
[17:24:19] [main/INFO] [FML]: Java is OpenJDK 64-Bit Server VM, version 1.8.0_292, running on Linux:amd64:5.4.143-1-pve, installed at /usr/lib/jvm/java-8-openjdk-amd64/jre
[17:24:19] [main/INFO] [FML]: Searching /home/mcuser/minecraft/./mods for mods
[17:24:19] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker
[17:24:19] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLDeobfTweaker
[17:24:19] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker
[17:24:19] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker
[17:24:19] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper
[17:24:23] [main/INFO] [FML]: Found valid fingerprint for Minecraft Forge. Certificate fingerprint e3c3d50c7c986df74c645c0ac54639741c90a557
[17:24:23] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper
[17:24:23] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLDeobfTweaker
[17:24:23] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.TerminalTweaker
[17:24:23] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.TerminalTweaker
[17:24:24] [main/INFO] [LaunchWrapper]: Launching wrapped minecraft {net.minecraft.server.MinecraftServer}
[17:24:29] [Server thread/INFO] [minecraft/DedicatedServer]: Starting minecraft server version 1.12.2
[17:24:29] [Server thread/INFO] [FML]: MinecraftForge v14.23.5.2855 Initialized
[17:24:29] [Server thread/INFO] [FML]: Starts to replace vanilla recipe ingredients with ore ingredients.
[17:24:29] [Server thread/INFO] [FML]: Invalid recipe found with multiple oredict ingredients in the same ingredient...
[17:24:30] [Server thread/INFO] [FML]: Replaced 1227 ore ingredients
[17:24:30] [Server thread/INFO] [FML]: Searching /home/mcuser/minecraft/./mods for mods
[17:24:31] [Server thread/INFO] [FML]: Forge Mod Loader has identified 6 mods to load
[17:24:31] [Server thread/WARN] [FML]: Missing English translation for FML: assets/fml/lang/en_us.lang
[...]
And now it loads our mods ! Now let's download the mods locally for our client:
If you try to login without the mods on the client you will see an error like that one:
[ 10.66.66.2/32 ] [ /dev/pts/139 ] [~/.minecraft/mods]
→ wget https://media.forgecdn.net/files/2518/667/Baubles-1.12-1.5.2.jar
--2021-11-16 18:26:43-- https://media.forgecdn.net/files/2518/667/Baubles-1.12-1.5.2.jar
SSL_INIT
Loaded CA certificate '/etc/ssl/certs/ca-certificates.crt'
Resolving media.forgecdn.net (media.forgecdn.net)... 13.224.226.83, 13.224.226.110, 13.224.226.86, ...
Connecting to media.forgecdn.net (media.forgecdn.net)|13.224.226.83|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 108450 (106K) [application/octet-stream]
Saving to: ‘Baubles-1.12-1.5.2.jar’
Baubles-1.12-1.5.2.jar 100%[=====================================================================================================================>] 105.91K --.-KB/s in 0.05s
2021-11-16 18:26:43 (1.98 MB/s) - ‘Baubles-1.12-1.5.2.jar’ saved [108450/108450]
[ 10.66.66.2/32 ] [ /dev/pts/139 ] [~/.minecraft/mods]
→ wget https://media.forgecdn.net/files/2835/318/defiledlands-1.12.2-1.4.3.jar
--2021-11-16 18:26:50-- https://media.forgecdn.net/files/2835/318/defiledlands-1.12.2-1.4.3.jar
SSL_INIT
Loaded CA certificate '/etc/ssl/certs/ca-certificates.crt'
Resolving media.forgecdn.net (media.forgecdn.net)... 13.224.226.86, 13.224.226.83, 13.224.226.110, ...
Connecting to media.forgecdn.net (media.forgecdn.net)|13.224.226.86|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 780421 (762K) [application/x-amz-json-1.0]
Saving to: ‘defiledlands-1.12.2-1.4.3.jar’
defiledlands-1.12.2-1.4.3.jar 100%[=====================================================================================================================>] 762.13K 2.89MB/s in 0.3s
2021-11-16 18:26:51 (2.89 MB/s) - ‘defiledlands-1.12.2-1.4.3.jar’ saved [780421/780421]
And we manage to login!
And that's it! We managed to log into our modded minecraft server.
For the players who want to download the mods they need to log into the server, you can setup a simple nginx to allow them to get there:
root@minecraft:~# vim /etc/nginx/sites-available/default
root@minecraft:~# cat /etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;
root /home/mcuser/minecraft/mods;
index index.html index.htm index.nginx-debian.html;
server_name _;
autoindex on;
location / {
try_files $uri $uri/ =404;
}
}
root@minecraft:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@minecraft:~# nginx -s reload
Now let's make a systemd service to launch our minecraft server
root@minecraft:~# vim /etc/systemd/system/minecraft.service
root@minecraft:~# cat /etc/systemd/system/minecraft.service
[Unit]
Description=Minecraft Server
After=syslog.target network.target
[Service]
# Ensure to set the correct user and working directory (installation directory of your server) here
User=mcuser
WorkingDirectory=/home/mcuser/minecraft/
# You can customize the maximum amount of memory as well as the JVM flags here
ExecStart=/usr/bin/java -XX:+UseG1GC -Xmx6G -jar forge-1.12.2-14.23.5.2855.jar --nojline --noconsole -Dsun.rmi.dgc.server.gcInterval=2147483646 -XX:+UnlockExperimentalVMOptions -XX:G1HeapRegionSize=32M -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50
# Restart the server when it is stopped or crashed after 30 seconds
# Comment out RestartSec if you want to restart immediately
Restart=always
RestartSec=3
# Alternative: Restart the server only when it stops regularly
# Restart=on-success
# Do not remove this!
StandardInput=null
[Install]
WantedBy=multi-user.target
root@minecraft:~# systemctl daemon-reload
root@minecraft:~# systemctl enable --now minecraft
Created symlink /etc/systemd/system/multi-user.target.wants/minecraft.service -> /etc/systemd/system/minecraft.service.
root@minecraft:~# systemctl status minecraft
* minecraft.service - Minecraft Server
Loaded: loaded (/etc/systemd/system/minecraft.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-11-18 08:16:11 UTC; 5s ago
Main PID: 31956 (java)
Tasks: 33 (limit: 7372)
Memory: 113.1M
CGroup: /system.slice/minecraft.service
`-31956 /usr/bin/java -XX:+UseG1GC -Xmx3G -jar forge-1.12.2-14.23.5.2855.jar --nojline --noconsole
Nov 18 08:16:11 minecraft systemd[1]: Started Minecraft Server.
For other minecraft versions you will need to install other java versions, sadly you need to deal with oracle being a corporation and you may need to login there. You're going to need either openjdk 11 or 17+, openjdk 11 being the cutover version from minecraft 1.16.5
use java version 1.8.0 (download it from the oracle website) to make a minecraft server 1.12.2 or on 1.16.5
>> https://www.oracle.com/java/technologies/downloads/archive/ (yes you need to create an account there, just fill it with garbage data)
Donate XMR: 8AUYjhQeG3D5aodJDtqG499N5jXXM71gYKD8LgSsFB9BUV1o7muLv3DXHoydRTK4SZaaUBq4EAUqpZHLrX2VZLH71Jrd9k8
Contact: nihilist@contact.nowhere.moe (PGP)